package lk.icta.core.dao;

import lk.icta.core.entity.AlienationMethod;
import lk.icta.core.entity.Objection;
import lk.icta.user.entity.User;

import java.util.Map;
import java.util.List;

/**
 * @author Duminda Dharmakeerthi
 * @author Sisiruwan Senadeera
 */
public interface AlienationMethodDAO {

    /**
     * Return an AlienationMethod corresponding to the given id
     *
     * @param id   alienation method id
     * @param user user requesting the operation
     * @return AlienationMethod
     */
    public AlienationMethod getAlienationMethodById(int id, User user);

    /**
     * Returns All Alienation Methods
     *
     * @param language the selected language
     * @param user     the user requesting the full District name list
     * @return a Map of all Alienation Methods for the given language
     */
    public Map<Integer, String> getAllAlienationMethods(String language, User user);

      /**
     * Returns All Alienation Methods
     *
     * @param language the selected language
     * @return a Map of all Alienation Methods for the given language
     */
    public Map<Integer, String> getAllAlienationMethods(String language);

     /**
     * Adding an Alienation Method
     *
     * @param alienationMethod  The AlienationMethod Object to be added
     */
    public void addAlienationMethod(AlienationMethod alienationMethod,User user);

     /**
     * To get all the updatable Alienation Methods according to the language
     *
     */
    public List<AlienationMethod> getAllUpdatableAlienationMethods();

    /**
     * Updating an existing Alienation Method
     *
     * @param alienationMethod  The AlienationMethod to be updated.
     */
     public void updateAlienationMethod(AlienationMethod alienationMethod,User user);

}
